package com.gaga.console.core.service;

import com.gaga.common.enums.PlayerType;
import com.gaga.common.enums.ScriptType;
import com.gaga.console.core.entity.dto.AudioPlayDto;
import com.gaga.console.core.entity.dto.RealTimeChangeGainDbDto;
import com.gaga.console.core.entity.dto.RealTimeChangeSpeedDto;
import com.gaga.console.core.entity.dto.RealTimeChangeVolumnDto;

public interface AudioPlayQueueService {

    /**
     * 将文件添加到相应的播放队列中，并尝试开始播放
     *
     * @param audioDto 要添加到队列中的文件名
     * @param type     指定文件所属的播放器类型，决定了文件加入哪个队列
     *                 <p>
     *                 此方法根据播放器类型将文件加入到锚点（anchor）队列或助手（assistant）队列中
     *                 如果是锚点类型，将文件加入锚点队列并尝试开始锚点播放；
     *                 如果是助手类型，则将文件加入助手队列并尝试开始助手播放
     */
    void addToQueue(AudioPlayDto audioDto, PlayerType type);

    void insertFirstToQueue(AudioPlayDto audioDto, PlayerType type);

    void stopLive();

    Integer getQueueSize(PlayerType playerType);

    Integer getQueueSizeByScriptType(ScriptType scriptType);

    void realTimeChangeSpeed(RealTimeChangeSpeedDto dto);

    void realTimeChangeVolumn(RealTimeChangeVolumnDto dto);

    void realTimeChangeGainDb(RealTimeChangeGainDbDto dto);

    void pause();

    void play();

    void startMute();

    void endMute();
}